import { z } from 'zod';

// 创建权限的验证 schema
export const createPermissionSchema = z.object({
  permissionName: z.string().min(2, '权限名称至少需要2个字符').max(50, '权限名称最多50个字符'),
  permissionKey: z.string().min(2, '权限标识至少需要2个字符').max(100, '权限标识最多100个字符'),
  permissionType: z.enum(['B', 'A', 'D']).default('B'), // B-业务, A-API, D-数据
  status: z.enum(['0', '1']).default('0'), // 0-正常, 1-停用
  remark: z.string().max(500, '备注最多500个字符').optional(),
});

// 更新权限的验证 schema
export const updatePermissionSchema = z.object({
  permissionName: z.string().min(2, '权限名称至少需要2个字符').max(50, '权限名称最多50个字符').optional(),
  permissionKey: z.string().min(2, '权限标识至少需要2个字符').max(100, '权限标识最多100个字符').optional(),
  permissionType: z.enum(['B', 'A', 'D']).optional(),
  status: z.enum(['0', '1']).optional(),
  updateBy: z.string().max(64, '更新者最多64个字符').optional(),
  remark: z.string().max(500, '备注最多500个字符').optional(),
}).refine(data => Object.keys(data).length > 0, {
  message: '至少需要提供一个字段进行更新',
});

// 角色授权权限的验证 schema
export const rolePermAuthSchema = z.object({
  roleId: z.number().int().positive('角色ID必须是正整数'),
  permissionIds: z.array(z.number().int()),
});

// 参数验证 schema
export const paramSchema = z.object({
  id: z.string().refine((val) => !isNaN(Number(val)), {
    message: 'ID 必须是数字',
  }),
});

// 导出类型
export type CreatePermissionDto = z.infer<typeof createPermissionSchema>;
export type UpdatePermissionDto = z.infer<typeof updatePermissionSchema>;
export type RolePermAuthDto = z.infer<typeof rolePermAuthSchema>;
export type ParamDto = z.infer<typeof paramSchema>; 